/**
 * dart中没有接口专有的关键字,抽象类和接口都是由abstract关键字来定义
 * 区别在于:
 *  1.使用extends来继承抽象类,只需要实现抽象方法即可
 *  2.使用implements来实现抽象类时,需要实现所有方法(包括不是抽象方法的的方法)
 *  3.使用implements可以多实现,如 xxx implements A,B
 */
abstract class Animal{
  eat();
  run();

  printInfo(){
    print('抽象类共有方法');
  }

}

class Dog extends Animal{
  @override
  eat() {
   print('小狗吃饭');
  }

  @override
  run() {
    print('小狗跑步');
  }

}

class Cat extends Animal{
  @override
  eat() {
    print('小猫吃饭');
  }

  @override
  run() {
    print('小猫跑步');
  }

}

void main(){
  Animal dog = new Dog();
  dog.printInfo();
  dog.eat();
  dog.run();

  Animal cat = new Cat();
  cat.printInfo();
  cat.eat();
  cat.run();
}